#####################
####  Study 2   #####
#####################

# This R-Script allows to replicate Figure 3 and Figure 4 in the main text, and Tables SI-3-10 and Figure SI-5 in the Appendix.
# The analysis was performed on R Version 4.1.2

# Clear environment ####

rm(list = ls())
gc()



# Installing and Loading Packages #############
#install.packages("dplyr")
#install.packages("car")
#install.packages("ggplot2")
#install.packages("haven")
#install.packages("survey")
#install.packages("modelr")
#install.packages("forcats")
#install.packages("broom")
#install.packages("tidyverse")
#install.packages("scales")
#install.packages("ggeffects")
#install.packages("modelsummary")
#install.packages("stargazer")
library(stargazer)
library(modelsummary)
library(tidyverse)
library(broom)
library(ggplot2)
library(car)
library(dplyr)
library(modelr)
library(forcats)
library(haven)
library(scales)
library(ggeffects)



# Set Working Directory and Import the datasets ######
setwd("insert here.. /Replication Materials - PSRM")
plotpath<-"insert here.. /Replication Materials - PSRM/Figures/"

Survey2_experiment <- readRDS("Data/Survey 2/Survey2_experiment.RDS")

# Generate key variables  #####

# Time (attentiveness) 
# 1st Qu. of the time
Survey2_experiment<-Survey2_experiment%>%
  mutate(time_less1st=case_when(minutes<5.625~1,
                                minutes>5.62499~0)) 

# Income (3 cat) 

Survey2_experiment<-Survey2_experiment%>%
  mutate(income_3cat=case_when(income<4 ~ 1,
                           income==4|  income==5|  income==6~ 2,
                           income>6 ~ 3)) 
Survey2_experiment$income_3cat<-factor(Survey2_experiment$income_3cat, levels=c(1,2,3),
                     labels = c("Less than $34,999",
                                "$34,999 - $99,999",
                                "$99,999 000 and above"))
# Low income (dummy) 
Survey2_experiment$highincome<- factor (with(Survey2_experiment, ifelse ((income >5 ),1,0)))


# Low education (dummy) 
Survey2_experiment$lowedu_somecollege<- factor (with(Survey2_experiment, ifelse ((education=="Less than high school" |
                                                                      education=="High school diploma" | 
                                                                      education=="Some college" ),1,0)))

# White (dummy) 
Survey2_experiment$white<- factor (with(Survey2_experiment, ifelse ((Race=="White"),1,0)))


# Ideology (3 cats) 

Survey2_experiment<-Survey2_experiment%>%
  mutate(libcons=case_when(ideology<5 ~ 1,
                           ideology==5|  ideology==6~ 2,
                           ideology>6 ~ 3)) 
Survey2_experiment$libcons<-factor(Survey2_experiment$libcons,
                     levels =c(1,2,3),
                     labels=c("liberal","moderate","conservative"))

# Outcomes (Main Question)
Survey2_experiment<-Survey2_experiment%>%
  mutate(MainQ_support=case_when(exp_MainQ<3~1,
                           exp_MainQ>2~0)) 

Survey2_experiment<-Survey2_experiment%>%
  mutate(MainQ_stronglysupport=case_when(exp_MainQ==1~1,
                                   exp_MainQ>1~0)) 


Survey2_experiment$exp_treatment_inc<-relevel(Survey2_experiment$exp_treatment, ref="Income Differences")


###  ---- Main text ---- ### -----
# Figure (3)  Average support for reducing income differences, by question’s version   ######

Fig3_data<-
  Survey2_experiment %>%   
  dplyr::select(exp_treatment, MainQ_support) %>%
  dplyr:: filter(!is.na(MainQ_support)) %>%
  dplyr::filter(!is.na(exp_treatment)) %>%
  dplyr::group_by(exp_treatment) %>%     
  dplyr::summarize(mean=mean(MainQ_support), n=n(), sd=sd(MainQ_support), se=sd/sqrt(n)) %>%
  dplyr::mutate(prop=mean*100) 


Fig_3<-
  ggplot(Fig3_data) +
  aes(x = exp_treatment, fill = exp_treatment, colour=exp_treatment,  y = mean) +
  scale_y_continuous(labels = percent_format(accuracy = 1))+  geom_point(size=3, color="#136266") +
  geom_errorbar(aes(ymin = mean-se*1.96, ymax = mean+se*1.96), width = 0, size=1, alpha=0.8, color="#136266") +
  scale_fill_manual(values = c("#1E7875", "#1E7875", "#1E7875", "#1E7875"))+
  scale_colour_manual(values = c("#1E7875","#1E7875", "#1E7875", "#1E7875"))+
  coord_cartesian(ylim = c(0.4, 0.8)) + 
  labs(x = " 
       ", y = "
       ") +scale_x_discrete(labels = c("Income \n Differences","Government's \n responsibility",
                                       "Market \n intervention", "Redistributive \n measures"))+
  theme_minimal() + theme(legend.position = "none",
                          axis.text = element_text(size=13))
Fig_3

ggsave(Fig_3, dpi = 600,
       filename = paste0(plotpath, "Fig_3.png"),
       height = 5, width = 8, device = "png")
setwd(plotpath)
system("open Fig_3.png")


# Figure (4)  Predicted Support for Reducing Income Differences, by Income ########
# Change the ref category
Survey2_experiment$exp_treatment_inc<-relevel(Survey2_experiment$exp_treatment, ref="Income Differences")

lm1_income<-lm(MainQ_support~exp_treatment_inc*highincome, data=Survey2_experiment)
predict_lm1_income <- ggpredict(lm1_income, terms = c("exp_treatment_inc", "highincome"))

predict_lm1_income$group <- factor(predict_lm1_income$group, labels = c("Low Income", "High Income"))

predict_lm1_income<-data_frame(predict_lm1_income)

fig_4<-
  predict_lm1_income %>%
  ggplot()+aes(y=predicted,x=x,colour=group,fill=group)+
  scale_colour_manual(values=c("#CCAB52", "#1E7875", "#CCAB52", "#1E7875"))  +
  scale_fill_manual(values=c("#CCAB52", "#1E7875", "#CCAB52", "#1E7875"))  +
  geom_point(size=2.5,  position = position_dodge(width = 0.1), aes(colour = group)) +
  geom_errorbar(aes(ymin = predicted-std.error*1.96, ymax = predicted+std.error*1.96), 
                alpha=0.4, width = 0, size=0.8,  position = position_dodge(width = 0.1)) +
  geom_errorbar(aes(ymin = predicted-std.error*1.64, ymax = predicted+std.error*1.64), 
                width = 0, size=0.8,  position = position_dodge(width = 0.1)) +
  geom_line(aes(group=group, shape=group), linetype = 2, alpha=0.5, position = position_dodge(width = 0.1), size=0.8)+
  labs(x = " 
       ", y = "Predicted Support
       ", colour="", fill="", shape="", group="" ) +  
  scale_y_continuous(breaks = c(0.4, 0.5, 0.6, 0.7, 0.8),    
                     limits = c(0.4, 0.85))+
  scale_x_discrete(labels = c('Income \n Differnces', "Government \n Responsibility", 'Markert \n Intervention', 'Redistributive \n Measures'))+
  theme_minimal() + theme(legend.position = "bottom",
                          axis.text = element_text(size=13),
                          legend.text = element_text(size=13))

fig_4


ggsave(fig_4, dpi = 600,
       filename = paste0(plotpath, "fig_4.png"),
       height = 6, width = 10, device = "png")
setwd(plotpath)
system("open fig_4.png")



###  ---- Appendix ---- ###-----
# Table  (SI-3)  Descriptive Statistics and Balance Tests  ######

DescriptStats_survey2<-Survey2_experiment%>%
  dplyr::select(female, age, white, lowedu_somecollege )

# Rename the values within each variable
DescriptStats_survey2 <- DescriptStats_survey2 %>%
  dplyr::select(female, age, white, lowedu_somecollege) %>%
  dplyr::mutate(
    female = case_when(
      female == 0 ~ "Male",
      female == 1 ~ "Female",),
    white = case_when(
      white == 0 ~ "Non White",
      white == 1 ~ "White",
    ),
    lowedu_somecollege = case_when(
      lowedu_somecollege == 0 ~ "Low Education",
      lowedu_somecollege == 1 ~ "High Education",
    )
  )

# Generate summary table
sumtable(DescriptStats_survey2,   
         # out="csv", file="TableC.2.csv"
)


# Table  (SI-4)  Balance Test  ######

Balance_data<-Survey2_experiment%>%
  ungroup()%>%
  dplyr::select(female, age, education, Race, income_3cat, libcons, PID3_RID, exp_treatment)%>%
  rename("Female"=female,
         "Age"=age,
         "Education"=education,
         "Race"=Race,
         "Income"=income_3cat,
         "Ideology"=libcons,
         "Party ID"=PID3_RID)%>%
  dplyr::mutate( Female = case_when(
    Female == 0 ~ "Male",
    Female == 1 ~ "Female",))


# Generate balance table
datasummary_balance(~exp_treatment,
                    data = Balance_data,
                    # output="Table_SI4.tex",
                    title = "Balance Test",
                    notes = "Notes:",
                    fmt= '%.5f',
                    dinm = TRUE,
                    dinm_statistic = "std.error" )


# Table  (SI-5)  Reducing Income Differences Between Rich and Poor, Full Sample  ######

# Change the ref category
Survey2_experiment$exp_treatment_govres<-relevel(Survey2_experiment$exp_treatment, 
                                                 ref="Government's Responsibility")
relevel(Survey2_experiment$Race, ref="White")

# Support (“deﬁnitely should be” or “probably should be”) 
# Minimal specification
lm1<-lm(MainQ_support~exp_treatment_govres, Survey2_experiment)
# Demographics
lm2<-lm(MainQ_support~exp_treatment_govres+female+age+education+white, Survey2_experiment)
# Demographics and Income and Idelogy
lm3<-lm(MainQ_support~exp_treatment_govres+female+age+education+white+income_3cat+libcons, Survey2_experiment)

# Strongly support (“deﬁnitely should be”)
# Minimal specification
lm4<-lm(MainQ_stronglysupport~exp_treatment_govres, Survey2_experiment)
# Demographics
lm5<-lm(MainQ_stronglysupport~exp_treatment_govres+female+age+education+white, Survey2_experiment)
# Demographics and Income and Idelogy
lm6<-lm(MainQ_stronglysupport~exp_treatment_govres+female+age+education+white+income_3cat+libcons, Survey2_experiment)

stargazer(lm1, lm2, lm3,
          lm4, lm5,  lm6,
          type="text", header=FALSE, 
          title="Table (SI-5) Reducing Income Differences Between Rich and Poor, Full Sample",
          dep.var.labels=c("Support", "Support", "Support", "Strongly support", "Strongly support", "Strongly support"),
          keep = c("exp_treatment_govresIncome Differences", 
                   "exp_treatment_govresMarket intervention", 
                   "exp_treatment_govresRedistributive Measures",    
                   "Constant"),
          covariate.labels=c("T1: Income Differences", 
                             "T2: Market intervention", 
                             "T3: Redistributive Measures", 
                             "Constant"),
          omit.stat = c('adj.rsq', 'ser', 'f'),
          star.cutoffs = c(0.05, 0.01, 0.001), star.char = c('*','**','**'),
          add.lines = list(c("Demographics", "No", "Yes", "Yes", "No", "Yes", "Yes")),
          table.placement="htbp!", notes.append = F)










# Table  (SI-6)  Interaction with income, full sample #######
# Minimal specification
lm1_income<-lm(MainQ_support~exp_treatment_inc*highincome,data=Survey2_experiment)
# Demographics
lm2_income<-lm(MainQ_support~exp_treatment_inc*highincome+female+age+education+white, data=Survey2_experiment)
# Demographics and Time duration (less than the ﬁrst quarter time in the sample)
lm3_income<-lm(MainQ_support~exp_treatment_inc*highincome+female+age+education+white+time_less1st, data=Survey2_experiment)
# Demographics and ideology
lm4_income<-lm(MainQ_support~exp_treatment_inc*highincome+female+age+education+white+libcons,  data=Survey2_experiment)

stargazer(lm1_income, lm2_income, 
          lm3_income,lm4_income,
          type="text", header=FALSE,  
          title="Interaction with income, by ideological leaning",
          dep.var.labels=c("Support"),
          keep = c("exp_treatment_incGovernment's Responsibility", 
                   "exp_treatment_incMarket intervention", 
                   "exp_treatment_incRedistributive Measures",    
                   "highincome1", 
                   "exp_treatment_incGovernment's Responsibility:highincome1",
                   "exp_treatment_incMarket intervention:highincome1",
                   "exp_treatment_incRedistributive Measures:highincome1",
                   "Constant"),
          covariate.labels=c("Government's Responsibility", 
                             "Market intervention", 
                             "Redistributive Measures", 
                             "High Income", 
                             "Government's Responsibility X High Income", 
                             "Market intervention X High Income", 
                             "Redistributive Measures X High Income",
                             "Constant"),
          omit.stat = c('adj.rsq', 'ser', 'f'),
          star.cutoffs = c(0.1, 0.05, 0.01), star.char = c("†", "*", "**"),
          add.lines = list(c("Demographics", "No", "Yes", "Yes", "Yes"),
                           c("Attention", "No", "No", "Yes", "No"),
                           c("Ideology", "No", "No", "No", "Yes")),
          table.placement="htbp!",notes.append = F)



# Figure (SI-5)  Predicted support for reducing income differences, by income and ideology -----

liberal_data<-subset(Survey2_experiment, ideology<5)
conservative_data<-subset(Survey2_experiment, ideology>6)
moderate_data<-subset(Survey2_experiment, ideology==6 | ideology==5)

lm1_income_lib<-lm(MainQ_support~exp_treatment_inc*highincome, data=liberal_data)
predict_lm1_income_lib <- ggpredict(lm1_income_lib, terms = c("exp_treatment_inc", "highincome"))


lm1_income_cons<-lm(MainQ_support~exp_treatment_inc*highincome,data=conservative_data)
predict_lm1_income_cons <- ggpredict(lm1_income_cons, terms = c("exp_treatment_inc", "highincome"))


Fig_SI6_pred <- bind_rows(predict_lm1_income_lib,
                          predict_lm1_income_cons, 
                          .id="Model")
Fig_SI6_pred$Model <- factor(Fig_SI6_pred$Model, labels = c("Liberal", "Conservative"))
Fig_SI6_pred$group <- factor(Fig_SI6_pred$group, labels = c("Low Income", "High Income"))

Fig_SI6_data<-data_frame(Fig_SI6_pred)

Fig_SI6<-
  Fig_SI6_data %>%
  ggplot()+aes(y=predicted,x=x,colour=group,fill=group,shape=group)+
  scale_colour_manual(values=c("#CCAB52", "#1E7875"))  +
  scale_fill_manual(values=c("#CCAB52", "#1E7875"))  +
  geom_point(size=2.8,  position = position_dodge(width = 0.1), aes(colour = group)) +
  geom_errorbar(aes(ymin = predicted-std.error*1.96, ymax = predicted+std.error*1.96), 
                alpha=0.4, width = 0, size=0.8,  position = position_dodge(width = 0.1)) +
  geom_errorbar(aes(ymin = predicted-std.error*1.64, ymax = predicted+std.error*1.64), 
                width = 0, size=0.8,  position = position_dodge(width = 0.1)) +
  geom_line(aes(group=group, shape=group), linetype = 2, alpha=0.5, position = position_dodge(width = 0.1),  size=1.3)+
  labs(x = " 
       ", y = "Predicted Support
       ", colour="", fill="", shape="", group="" ) +   facet_wrap(~Model)+
  scale_y_continuous(breaks = c(0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1),    
                     limits = c(0.3, 1))+
  scale_x_discrete(labels = c('Income \n Differences', "Government \n Responsibility", 'Markert \n Intervention', 'Redistributive \n Measures'))+
  theme_minimal() + theme(legend.position = "bottom",  text=element_text(size=14))
Fig_SI6
ggsave(Fig_SI6, dpi = 600,
       filename = paste0(plotpath, "Fig_SI6.png"),
       height = 6, width = 10, device = "png")
setwd(plotpath)
system("open Fig_SI6.png")

# Table  (SI-7)  Interaction with income, by ideological leaning #####
# Liberal
# Minimal specification
lm1_income_lib<-lm(MainQ_support~exp_treatment_inc*highincome, data=liberal_data)
# Demographics
lm2_income_lib<-lm(MainQ_support~exp_treatment_inc*highincome+female+age+education+white, data=liberal_data)

# Conservative
# Minimal specification
lm1_income_cons<-lm(MainQ_support~exp_treatment_inc*highincome,data=conservative_data)
# Demographics
lm2_income_cons<-lm(MainQ_support~exp_treatment_inc*highincome+female+age+education+white, data=conservative_data)


# Moderate
lm1_income_mod<-lm(MainQ_support~exp_treatment_inc*highincome,data=moderate_data)
lm2_income_mod<-lm(MainQ_support~exp_treatment_inc*highincome+female+age+education+white, data=moderate_data)

stargazer(lm1_income_lib, lm2_income_lib, 
          lm1_income_mod, lm2_income_mod,
          lm1_income_cons, lm2_income_cons,
          type="text", header=FALSE, 
          title="Interaction with income, by ideological leaning",
          dep.var.labels=c("Support"),
          column.separate	 = c(2,2,2),
          column.labels = c("Liberal", "Moderate", "Conservative"),
          keep = c("exp_treatment_incGovernment's Responsibility", 
                   "exp_treatment_incMarket intervention", 
                   "exp_treatment_incRedistributive Measures",    
                   "highincome1", 
                   "exp_treatment_incGovernment's Responsibility:highincome1",
                   "exp_treatment_incMarket intervention:highincome1",
                   "exp_treatment_incRedistributive Measures:highincome1",
                   "Constant"),
          covariate.labels=c("Government's Responsibility", 
                             "Market intervention", 
                             "Redistributive Measures", 
                             "High Income", 
                             "Government's Responsibility X High Income", 
                             "Market intervention X High Income", 
                             "Redistributive Measures X High Income",
                             "Constant"),
          omit.stat = c('adj.rsq', 'ser', 'f'),
          star.cutoffs = c(0.1, 0.05, 0.01), star.char = c("†", "*", "**"),
          add.lines = list(c("Demographics", "No", "Yes", "No", "Yes", "No", "Yes")),
          table.placement="htbp!", notes.append = F)









# Table  (SI-8)  Interaction with income (over $100,000), full sample #####
# Alternative measure of high income (above cat 6 (over $100,000))
Survey2_experiment$highincome6<- factor (with(Survey2_experiment, ifelse ((income>6 ),1,0)))

# Minimal specification
lm1_income6<-lm(MainQ_support~exp_treatment_inc*highincome6, data=Survey2_experiment)

# Demographics
lm2_income6<-lm(MainQ_support~exp_treatment_inc*highincome6+female+age+education+white, 
                                     data=Survey2_experiment)
# Demographics and Ideplogy
lm3_income6<-lm(MainQ_support~exp_treatment_inc*highincome6+female+age+education+white+libcons, 
                                          data=Survey2_experiment)

stargazer(lm1_income6, lm2_income6, lm3_income6,
          type="text", header=FALSE,  
          title="Interaction with income, full sample",
          dep.var.labels=c("Support"),
          keep = c("exp_treatment_incGovernment's Responsibility", 
                   "exp_treatment_incMarket intervention", 
                   "exp_treatment_incRedistributive Measures",    
                   "highincome61", 
                   "exp_treatment_incGovernment's Responsibility:highincome61",
                   "exp_treatment_incMarket intervention:highincome61",
                   "exp_treatment_incRedistributive Measures:highincome61",
                   "Constant"),
          covariate.labels=c("Government's Responsibility", 
                             "Market intervention", 
                             "Redistributive Measures", 
                             "High Income", 
                             "Government's Responsibility X High Income", 
                             "Market intervention X High Income", 
                             "Redistributive Measures X High Income",
                             "Constant"),
          omit.stat = c('adj.rsq', 'ser', 'f'),
          star.cutoffs = c(0.1, 0.05, 0.01), star.char = c("†", "*", "**"),
          add.lines = list(c("Demographics", "No", "Yes", "No", "Yes")),
          table.placement="htbp!", notes.append = F)



# Table  (SI-9)  Interaction with income (over $100,000), by ideology ####
liberal_data<-subset(Survey2_experiment, ideology<5)
conservative_data<-subset(Survey2_experiment, ideology>6)
moderate_data<-subset(Survey2_experiment, ideology==6 | ideology==5)


lm1_income6_lib<-lm(MainQ_support~exp_treatment_inc*highincome6,
                                data=liberal_data)
lm2_income6_lib<-lm(MainQ_support~exp_treatment_inc*highincome6+female+age+education+white, 
                                         data=liberal_data)

lm1_income6_cons<-lm(MainQ_support~exp_treatment_inc*highincome6,
                                 data=conservative_data)
lm2_income6_cons<-lm(MainQ_support~exp_treatment_inc*highincome6+female+age+education+white, 
                                          data=conservative_data)


lm1_income6_mod<-lm(MainQ_support~exp_treatment_inc*highincome6,
                                data=moderate_data)
lm2_income6_mod<-lm(MainQ_support~exp_treatment_inc*highincome6+female+age+education+white, 
                                         data=moderate_data)

stargazer(lm1_income6_lib, lm2_income6_lib, 
          lm1_income6_mod, lm2_income6_mod,
          lm1_income6_cons, lm2_income6_cons,
          type="text", header=FALSE, 
          title="Interaction with income, by ideology",
          dep.var.labels=c("Support"),
          column.separate	 = c(2,2,2),
          column.labels = c("Liberal", "Moderate", "Conservative"),
          keep = c("exp_treatment_incGovernment's Responsibility", 
                   "exp_treatment_incMarket intervention", 
                   "exp_treatment_incRedistributive Measures",    
                   "highincome61", 
                   "exp_treatment_incGovernment's Responsibility:highincome61",
                   "exp_treatment_incMarket intervention:highincome61",
                   "exp_treatment_incRedistributive Measures:highincome61",
                   "Constant"),
          covariate.labels=c("Government's Responsibility", 
                             "Market intervention", 
                             "Redistributive Measures", 
                             "High Income", 
                             "Government's Responsibility X High Income", 
                             "Market intervention X High Income", 
                             "Redistributive Measures X High Income",
                             "Constant"),
          omit.stat = c('adj.rsq', 'ser', 'f'),
          star.cutoffs = c(0.1, 0.05, 0.01), star.char = c("†", "*", "**"),
          add.lines = list(c("Demographics", "No", "Yes", "No", "Yes", "No", "Yes")),
          table.placement="htbp!",notes.append = F)

# Table  (SI-10) Interaction with income, by party ####
dem_data<-subset(Survey2_experiment, PID3_RID=="Democrat")
rep_data<-subset(Survey2_experiment, PID3_RID=="Republican")
ind_data<-subset(Survey2_experiment, PID3_RID=="Independent")

# Democrats 
# Minimal specification
lm1_income_dem<-lm(MainQ_support~exp_treatment_inc*highincome,
                               data=dem_data)
# Demographics
lm2_income_dem<-lm(MainQ_support~exp_treatment_inc*highincome+female+age+education+white, 
                                        data=dem_data)

# Republicans 
# Minimal specification
lm1_income_rep<-lm(MainQ_support~exp_treatment_inc*highincome,
                               data=rep_data)
# Demographics
lm2_income_rep<-lm(MainQ_support~exp_treatment_inc*highincome+female+age+education+white, 
                                        data=rep_data)


# Independents 
# Minimal specification
lm1_income_ind<-lm(MainQ_support~exp_treatment_inc*highincome,
                               data=moderate_data)
# Demographics
lm2_income_ind<-lm(MainQ_support~exp_treatment_inc*highincome+female+age+education+white, 
                                        data=ind_data)

stargazer(lm1_income_dem, lm2_income_dem, 
          lm1_income_ind, lm2_income_ind,
          lm1_income_rep, lm2_income_rep,
          type="text", header=FALSE, 
          title="Interaction with income, by party",
          dep.var.labels=c("Support"),
          column.separate	 = c(2,2,2),
          column.labels = c("Democrat", "Independent", "Republican"),
          keep = c("exp_treatment_incGovernment's Responsibility", 
                   "exp_treatment_incMarket intervention", 
                   "exp_treatment_incRedistributive Measures",    
                   "highincome1", 
                   "exp_treatment_incGovernment's Responsibility:highincome1",
                   "exp_treatment_incMarket intervention:highincome1",
                   "exp_treatment_incRedistributive Measures:highincome1",
                   "Constant"),
          covariate.labels=c("Government's Responsibility", 
                             "Market intervention", 
                             "Redistributive Measures", 
                             "High Income", 
                             "Government's Responsibility X High Income", 
                             "Market intervention X High Income", 
                             "Redistributive Measures X High Income",
                             "Constant"),
          omit.stat = c('adj.rsq', 'ser', 'f'),
          star.cutoffs = c(0.1, 0.05, 0.01), star.char = c("†", "*", "**"),
          add.lines = list(c("Demographics", "No", "Yes", "No", "Yes", "No", "Yes")),
          table.placement="htbp!", notes.append = F)










